﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebRamosUC.Models
{
    public class RepositorioPeriodo : WebRamosUC.Models.IRepositorioPeriodo
    {
        WebRamosUCDataContext db;

        public RepositorioPeriodo()
        {
            db = new WebRamosUCDataContext();
        }

        public RepositorioPeriodo(WebRamosUCDataContext dataContext)
        {
            this.db = dataContext;
        }

        /// <summary>
        /// Retorna todos los periodos.
        /// </summary>
        /// <returns></returns>
        public IQueryable<Periodo> GetAllPeriodos()
        {
            return from p in db.Periodos
                   select p;
        }

        /// <summary>
        /// Retorna el periodo que se esta cursando en este momento.
        /// </summary>
        public Periodo GetPeriodoActual()
        {
            int anio = DateTime.Now.Year;
            int mes = DateTime.Now.Month;
            
            int semestre;

            if (mes <= 2)
                semestre = 0;
            else if (mes < 7)
                semestre = 1;
            else
                semestre = 2;

            return GetPeriodo(anio, semestre);
        }

        /// <summary>
        /// Retorna el periodo correspondiente al anio y semestre indicados.
        /// </summary>
        /// <param name="anio">Anio del periodo, por ejemplo: 1999, 2008, 2010.</param>
        /// <param name="semestre">Semestre del periodo. Puede ser 0 (= TAV), 1, y 2.</param>
        public Periodo GetPeriodo(int anio, int semestre)
        {
            return db.Periodos.SingleOrDefault(p => (p.Anio == anio) && (p.Semestre == semestre));
        }

        public Periodo GetPeriodo(string anio, string semestre)
        {
            return GetPeriodo(Int32.Parse(anio), Int32.Parse(semestre));
        }

        /// <summary>
        /// Guarda los cambios.
        /// </summary>
        public void Save()
        {
            db.SubmitChanges();
        }

        public void AddPeriodo(Periodo periodo)
        {
            db.Periodos.InsertOnSubmit(periodo);
        }
    }
}